#include <iostream>
#include <tuple>
// 函数模板，用于打印参数包中的所有元素
template<typename T, typename... Args>
void print(T first, Args... args) {
    std::cout << first << " ";
    if constexpr (sizeof...(args) > 0) {
        print(args...);  // 递归调用
    }
}


// 定义一个通用的容器类模板，使用可变参数模板
template<typename... Items>
class Container {
private:
    std::tuple<Items...> contents;  // 使用tuple来存储任意类型的元素

public:
    // 构造函数，接收任意数量和类型的参数，并存储它们
    Container(Items... items) : contents(std::make_tuple(items...)) {}

    // 获取特定位置的元素
    template<std::size_t N>
    decltype(auto) get() const {
        return std::get<N>(contents);
    }
};

int main() {


    print(1, 2.5, "Hello", 'c');  // 输出：1 2.5 Hello c
    // 创建一个容器，存储不同类型的数据
    Container<int, double, char, std::string> myContainer(42, 3.14, 'a', "Hello");

    // 访问并打印容器中的元素
    std::cout << "Integer: " << myContainer.get<0>() << std::endl;
    std::cout << "Double: " << myContainer.get<1>() << std::endl;
    std::cout << "Char: " << myContainer.get<2>() << std::endl;
    std::cout << "String: " << myContainer.get<3>() << std::endl;

    return 0;
}